module queue();

// data_type name[$]; // 无界队列
// data_type name[$:<size>]; // 有界队列

integer queue[$] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; // 无界队列
integer element;
initial begin
    // 打印队列的内容
    print_queue();

    // 队列的大小
    $display("queue.size(): %0d", queue.size());

    // 删除队列的首位元素
    $display("queue.pop_front(): %0d", queue.pop_front());

    // 删除队列的末位元素
    $display("queue.pop_back(): %0d", queue.pop_back());

    // 打印删除后的队列的内容
    print_queue();

    // 插入元素到队列的首位
    queue.push_front(10);
    $display("queue.push_front(10): %0d", queue[0]);

    // 插入元素到队列的末位
    queue.push_back(20);
    $display("queue.push_back(20): %0d", queue[queue.size()-1]);

    // 插入元素到队列的中间
    queue.insert(2, 30);
    $display("queue.insert(2, 30): %0d", queue[2]);

    // 打印插入后的队列的内容
    print_queue();
    
end

task print_queue();
    // 打印队列的内容
    $display("Start Printing queue");
    foreach (queue[i]) begin
        $display("queue[%0d]: %0d", i, queue[i]);
    end
    $display("End Printing queue");
endtask

endmodule
